GitHub 的介绍


1. Git 和 GitHub 的关系

  • Git 是代码历史版本控制器
  • GitHub 是代码托管中心

2. 示意图


Github 界面介绍


1. 代码库


2. 任务管理

  • 任务管理用于记录和汇总项目的问题

  • 任务管理的界面


  • 新增问题


  • 问题详情页


2. Wiki

  • Wiki 相当于维基百科,用于编写项目的文档(即: 有什么功能,用什么技术实现的)


创建远程库




本地库操作远程库地址的命令


1. 在本地库创建远程库的地址别名

  • 命令: git remote add 自定义远程库网址别名 远程库HTTPS网址/远程库的SSH地址

git remote add origin https://github.com/toKevin/django_project.git  # 一般都会使用 origin 作为别名名称,算是约定俗成

2. 修改指定别名的远程库地址

  • 命令: git remote set-url 自定义远程库网址别名 远程库HTTPS网址/远程库的SSH地址

git remote set-url origin https://github.com/toKevin/django_project.git

3.删除指定别名的远程库地址

  • 命令: git remote remove 自定义远程库网址别名

git remote remove origin

4.查看所有在本地库的远程库地址别名

git remote

5.查看所有在本地库的远程库地址别名和对应的远程库地址

git remote -v

将本地库推送到远程库中


1. 在本地库创建远程库的地址别名

  • 作用: 方便对远程库的地址进行操作,不用每次操作都使用远程库的详细地址,而是直接使用别名即可

  • 通俗理解: 使用某个别名代表远程库的地址

  • 命令: git remote add 自定义远程库网址别名 远程库HTTPS网址

git remote add origin https://github.com/toKevin/django_project.git  # 一般都会使用 origin 作为别名名称,算是约定俗成

2. 查看所创建远程库网址的别名

git remote -v


3. 将本地库的某个分支推送到远程库

  • 命令: git push 远程库网址的别名 分支

git push origin master

  • 如果太久没登录或者没登录过那么就会弹出一个登陆界面


  • 推送成功




免密登陆


1. 为什么需要免密登陆?

  • 在一些旧系统或者旧版本的git上每次推送都需要输入密码

2. 方式一: 通过修改远程库的地址

  • 修改远程库地址

https://用户名:密码@github.com/Yeung-Kevin/django_project.git

  • 创建远程库地址别名

    • 命令: git remote add 自定义远程库网址别名 远程库HTTPS网址

git remote add origin https://用户名:密码@github.com/Yeung-Kevin/django_project.git

3. 方式二: 通过配置 SSH

  • 生成公钥和私钥

ssh-keygen.exe


  • 查看公钥

cat /c/Users/Mr.\ Yeung/.ssh/id_rsa.pub

# 等同于

cat /c/Users/'Mr. Yeung'/.ssh/id_rsa.pub


  • 将公钥添加到 GitHub 的配置中






  • 使用 SSH 网址创建远程库的地址别名



  • 创建远程库地址别名

    • 命令: git remote add 自定义远程库网址别名 远程库SSH网址

git remote add origin-ssh git@github.com:Yeung-Kevin/django_project.git

拉取远程库


1. 什么时候使用拉取或克隆?

  • pull(拉取): 当本地库和远程库是同一个库的时候,且需要将远程库的内容更新到本地库时(通俗理解: 更新远程库的内容到本地库),就要使用 pull

  • clone(克隆): 当本地主机没有如何库的时候,就要使用 clone

2. 拉取远程库的内容到本地库

  • 方式一: 使用 fetch 和 merge 进行拉取合并

    • 好处: 可以先从远程库现在到本地库看一下是否有误在进行合并

    • 将远程库分支下载到本地(此时未进行合并)

      • 命令: git fetch 远程库网址的别名 分支

git fetch origin master


    • 切换分支查看从远程库下载的东西是否有误(注:斜杠)

      • 命令: git checkout 远程库网址的别名/分支

git checkout origin/master


    • 合并分支(此时已经完成了拉取工作)

      • 注意: 在合并分支之前必须切换到需要合并的分支上(如果没有执行上一步那么可以忽略此步骤)

git checkout master


      • 命令: git merge 远程库网址的别名/分支

git merge origin/master


  • 方式二: pull 进行拉取合并【推荐】

    • pull 相当于 fetch 和 merge 的结合 ( pull = fetch + merge )

    • 命令: git pull 远程库网址的别名 分支

git pull origin master


3. 拉取远程库的问题

  • 当在拉取远程库内容的时候出现以下内容,就说明本地库的内容与远程库的内容不一致(即: 在你不知情的情况下有人往远程库推送了新的内容,使得本地库的历史版本低于远程库的历史版本)


  • 解决办法: 编写备注内容后保存 或 直接进行保存


克隆远程库到本地


1. 什么时候使用拉取或克隆?

  • pull(拉取): 当本地库和远程库是同一个库的时候,且需要将远程库的内容更新到本地库时,就要使用 pull

  • clone(克隆): 当本地主机没有如何库的时候,就要使用 clone

2. 克隆的效果

  • 完整的把远程库下载到本地

  • 自动创建 origin 远程库地址别名

  • 初始化本地库

3. 在任意目录下创建一个文件夹,用于克隆远程库到本地


4. 克隆远程库到本地

  • 复制远程库地址


  • 命令: git clone 远程库地址

git clone https://github.com/toKevin/django_project.git


公司内的协作操作


协作示意图



加入团队方式一:远程库单独邀请


缺点: 如果远程库过多,那么每个远程库都要邀请一次

1. 邀请员工到项目经理的远程库的团队中




2. 员工接收邀请

  • 方式一: 以邮件的形式接收邀请

    • 当项目经理发送邀请后,员工的github所绑定的邮箱会收到一封邀请信


  • 方式二: 以网址的形式接收邀请

    • 项目经理复制邀请链接给员工


    • 登陆员工账号打开项目经理给的邀请链接


加入团队方式二:组织


1. 组织的作用

  • 多个人可以开发或管理多个项目(即: 如果有多个员工并且有多个远程库,那么就不用每个远程库都要邀请一次员工)

3. 创查看你所创建的组织

  • 方式一:

    • 在个人中心中查看


  • 方式二:

    • 在个人设置中查看



2. 创建组织




3. 邀请组织成员





4. 接收邀请

  • 方式一: 邮件接收邀请


  • 方式二: 直接访问组织地址,就会显示邀请提示




5. 设置成员权限


协作流程


1. 员工克隆项目经理的远程库

  • 命令: git clone 远程库地址

git clone https://github.com/toKevin/django_project.git


2. 创建员工分支,并切换到员工分支下编写所需要的功能

  • 创建员工分支

    • 命令: git branch 新的分支名

git branch Yeung

  • 切换到员工分支下

    • 命令: git checkout 分支名

git checkout Yeung

3. 将今日以编写好的功能(即: 员工分支)推送到远程库中

  • 推送前提: 员工的账号要在项目经理远程库或组织(并且,员工在组织的权限为可拉取和推送)中

  • 如果你不在该远程库的团队中是无法推送到该远程库的


  • 命令: git push 远程库网址的别名 分支

git push origin Yeung

3. 从远程库中拉取昨日编写好的功能(即: 员工分支)继续编写

  • 拉取前提: 当远程库中的员工分支被别人修改过,那么就要重新拉取,如果没有被修改,那么可以直接忽略此步骤

  • 注意: 在这里我们就当作员工分支被人重新推送过,此时远程库的员工分支和自己本地的员工分支是不一致的,在日常开发中每个员工都会有单独的员工分支,一般别人不会修改远程库中属于你的员工分支

  • 命令: git pull 远程库网址的别名 分支

git pull origin Yeung


3. 将员工分支合并到 review 分支上(不是必要的,看公司需求)

  • 注意: 分支合并最好 1-3 天合并一次,时间拖得越久,冲突文件就会越多

  • 合并前提: 当员工分支的功能编写好后,将员工分支合并到 review 分支上让组长或项目经理查看代码是否有问题

  • 拉取远程库的 review 分支

    • 保证 review 分支的内容是最新的

    • 命令: git pull 远程库网址的别名 分支

git pull origin review


  • 切换到 review 分支上

    • 命令: git checkout 分支名

git checkout review


  • 将员工分支合并到 review 分支上

    • 命令: git merge 有新内容分支名

git merge Yeung


  • 解决合并冲突(省略) -> 前提是要有冲突

  • 将 review 分支推送到远程库中

    • 命令: git push 远程库网址的别名 分支

git push origin review


4. 将员工分支合并到 dev 分支上

  • 注意: 分支合并最好 1-3 天合并一次,时间拖得越久,冲突文件就会越多

  • 合并前提: 当员工分支的功能编写好后 或 组长已经审核过 review 分支上你所编写的功能

  • 拉取远程库的 dev 分支

    • 保证 dev 分支的内容是最新的

    • 命令: git pull 远程库网址的别名 分支

git pull origin dev


  • 切换到 dev 分支上

    • 命令: git checkout 分支名

git checkout dev


  • 将员工分支合并到 dev 分支上

    • 命令: git merge 有新内容分支名

git merge Yeung


  • 解决合并冲突(省略) -> 前提是要有冲突

  • 将 dev 分支推送到远程库中

    • 命令: git push 远程库网址的别名 分支

git push origin dev


4. 将 dev 分支合并到 master 分支上

  • 合并前提: 当 dev 分支的项目开发完后

  • 拉取远程库的 master 分支

    • 命令: git pull 远程库网址的别名 分支

git pull origin master


  • 拉取远程库的 dev 分支

    • 保证 dev 分支的内容是最新的

    • 命令: git pull 远程库网址的别名 分支

git pull origin dev


  • 切换到 master 分支上

    • 命令: git checkout 分支名

git checkout master


  • 将 dev 分支合并到 master 分支上

    • 命令: git merge 有新内容分支名

git merge dev


  • 解决合并冲突(省略) -> 前提是要有冲突

  • 将 master 分支推送到远程库中

    • 命令: git push 远程库网址的别名 分支

git push origin master


与别人协作是发生冲突的解决办法


1. 与别人协作时发生冲突的解决办法

  • 如果两个人都修改了同一个地方并且都提交到了远程库 那么远程库会保存先提交那个人的代码,反之另一个人会报错


  • 先拉取远程库最新的代码

    • 命令: git pull 远程库网址的别名 分支

git pull origin master


  • 查看所有冲突文件

git diff --name-only --diff-filter=U


  • 与别人沟通进行代码的修改



  • 将修改好的代码提交到本地库


  • 重新将修改好的代码推送到远程库

    • 命令: git push 远程库网址的别名 分支

git push origin master



与别人协作时可能会发生的问题


1. 与别人协作时可能会发生的问题


  • 当将项目推送到远程库的时候发生以上问题,那么有两种可能

    • 可能一: 当前的本地库的版本低于远程库的版本(即: 在你不知情的情况下,有人将项目先推送到了远程库中)

      • 解决方法: 重新拉取远程库的项目,然后再重新推送(如果你在旧版本的本地库中新建了某些文件,那么在拉取新版本的项目的时候,这些文件不会被删除)

    • 可能二: 当前的本地库的版本低于远程库的版本,且项目中的某些文件与远程库中的文件内容发生冲突了

      • 解决办法: 上面的 与别人协作时发生冲突的解决办法》 有提及到

  • 如何排查是那种可能性?

    • 注意: 只有先拉取远程库最新版本的项目才能进行排查


    • 方法一: 查看是否进入了手动合并模式


    • 方法二: 查看是否有冲突文件(即: 查看所有的冲突文件)

git diff --name-only --diff-filter=U


跨团队的协作操作(公司与公司外程序员的协作)


1. 协作示意图


2. fork 项目经理的远程库到公司外其他团队远程库上



2. 克隆从项目经理远程库哪里frok过来得而库到本地 和 完成内容修改 最总提交到其他公司团队的远程库中


3. 将修改好的项目提交给项目经理的远程库让他进行审核




  • 提交审核成功


4. 项目经理进行审核和合并